/*
 *Pattern: Visitor
 * Описывает операцию, выполняемую с каждым объектом из некоторой структуры. 
 * Паттерн Посетитель позволяет определить новую операцию, не изменяя классы 
 * этих объектов.
 */
package patterns;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

public class FileVisitor {
    public static void main(String[] args) throws IOException {
        Files.walkFileTree(
                Paths.get("d:/Android/"),
                new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(
                    Path file, BasicFileAttributes attrs)
                    throws IOException {
                System.out.println(file);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult preVisitDirectory(
                    Path dir, BasicFileAttributes attrs)
                    throws IOException {
                    System.out.println(" -> DIR: " + dir);
                    return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(
                    Path dir, IOException e)
                    throws IOException {
                if (e == null) {
                    System.out.println("<- DIR: " + dir);
                    return FileVisitResult.CONTINUE;
                } else {
                    throw e;
                }
            }
        });
    }
}